import MarkdownIt from 'markdown-it';
import path from "path";


function imagePlugin(md: MarkdownIt) {
    const defaultRender = md.renderer.rules.image || function (tokens, idx, options, env, self) {
        return self.renderToken(tokens, idx, options);
    };

    md.renderer.rules.image = (tokens, idx, options, env, self) => {
        console.log("tokens", tokens)
        console.log("idx", idx)
        console.log("options", options)
        console.log("env", env)
        console.log("self", self)
        const token = tokens[idx];
        const srcIndex = token.attrIndex('src');
        let customAttrs: Record<string, string> = {};
        if (srcIndex >= 0) {
            let src = token.attrs[srcIndex][1];
            // 文件地址 DEFAULT_ROOT_DIR + src
            // 如果是以 http 或 https 开头的 URL，不做处理
            if (!/^https?:\/\//i.test(src)) {
                // src 可以是相对路径，需要拼接成绝对路径
                // @ts-ignore
                src = path.resolve(options.mdFilePath, src);
                console.log("srcsrcsrc", src)
                // 变成相对路径
                src = path.relative("src", src);
                console.log("srcsrcsrc", src)
                tokens[idx].attrs[srcIndex][1] = 'src/' + src
            }
        }

        // tokens.length >= 1 第二个就是要修改的 img 标签
        if (srcIndex >= 0) {
            // 表示这个是 img 标签元素
            const text = tokens[idx + 1]
            if (text) {
                let attrsString = text.content.trim();
                console.log("attrsString", attrsString)
                // 去掉该字符串中的 { 和 }
                attrsString = attrsString.replace(/^\{(.+?)\}$/, "$1");
                attrsString.split(',').forEach(attr => {
                    const [key, value] = attr.split('=').map(s => s.trim());
                    if (key && value) {
                        customAttrs[key] = value;
                    }
                });
                // 将自定义属性添加到 <img> 标签中
                for (const [key, value] of Object.entries(customAttrs)) {
                    tokens[idx].attrs.push([key, value])
                }
                tokens[idx + 1].content = ''
            }
        }
        return defaultRender(tokens, idx, options, env, self);
    };
}


export default imagePlugin;
